/*
 * Bloque.cpp
 *
 *  Created on: 02/10/2010
 *      Author: damian
 */

#include "Bloque.h"


Bloque::Bloque(int numeroBloque, int tamanioBloque, fstream* archivo){

		this->setNumeroBloque(numeroBloque);
		this->setTamanioBloque(tamanioBloque);
		this->setArchivo(archivo);

		stringstream ios(ios_base::in| ios_base::out| ios_base::binary);
		int offset = (numeroBloque * tamanioBloque);

		ManejadorArchivo::RecuperarEstructura(archivo,&ios,offset, tamanioBloque);


		char* aux = new char[tamanioBloque];
		ios.read(aux, tamanioBloque);
		this->memoria = aux;


}

Bloque::Bloque(int numeroBloque, int tamanioBloque, string datoSerializado, fstream* archivo){

	this->setNumeroBloque(numeroBloque);
	this->setTamanioBloque(tamanioBloque);
	this->setArchivo(archivo);

	this->almacenarDato(datoSerializado);

}


bool Bloque::almacenarDato(string datoSerializado){


			this->setMemoria(this->getMemoria()+datoSerializado);

			this->persistirBloque();


			return true;

}


bool Bloque::persistirBloque(){

	stringstream ios(ios_base::in| ios_base::out| ios_base::binary);
	int offset = (this->getNumeroBloque() * this->getTamanioBloque());

	string cadenaAux = this->getMemoria();
	int tamanioOcupado = cadenaAux.length();

	for (int i = (tamanioOcupado); i <= (this->getTamanioBloque())+10; i++){
		cadenaAux = cadenaAux + '0';
	}

	cadenaAux[tamanioOcupado] = '\0';

	ios.write(cadenaAux.c_str(),this->getTamanioBloque()-1);

	return 	ManejadorArchivo::EscribirEstructura(this->getArchivo(), &ios,offset , this->getTamanioBloque());

}


fstream *Bloque::getArchivo()
{
    return archivo;
}

string Bloque::getMemoria()
{
    return memoria;
}

int Bloque::getNumeroBloque()
{
    return numeroBloque;
}

int Bloque::getTamanioBloque()
{
    return tamanioBloque;
}

void Bloque::setArchivo(fstream *archivo)
{
    this->archivo = archivo;
}

void Bloque::setMemoria(string memoria)
{
    this->memoria = memoria;
}

void Bloque::setNumeroBloque(int numeroBloque)
{
    this->numeroBloque = numeroBloque;
}

void Bloque::setTamanioBloque(int tamanioBloque)
{
    this->tamanioBloque = tamanioBloque;
}

Bloque::~Bloque() {
	// TODO Auto-generated destructor stub
}
